package com.kj.tms.pri.system.role.service;


import com.kj.tms.common.bean.dto.Pager;
import com.kj.tms.common.bean.dto.ReturnData;
import com.kj.tms.pri.system.role.dto.RoleDto;
import com.kj.tms.pri.system.user.dto.UserOrgRoleDto;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * @Author: zhangsong
 * @Description:
 * @Date: Created in 18:56 2017/10/18
 * @Company: 北京宏图天安
 * @Version: 2017/10/18
 * @Modified By:
 */
public interface RoleService {

    Pager queryByPage(@RequestBody(required = false) RoleDto model);

    Map<String, Object> listByPage(@RequestBody RoleDto model);

    /**
     * @Method
     * @Param
     * @Return
     * @Exception
     * @Description [保存]
     * @Author zhangsong
     * @Version 1.0
     * @Date 2017/11/16 10:27
     */
    ReturnData save(@RequestBody RoleDto dto);

    /**
     * @Method
     * @Param
     * @Return
     * @Exception
     * @Description [通过人员机构关联表 查询角色信息]
     * @Author zhangsong
     * @Version 1.0
     * @Date 2017/11/16 10:28
     */
    List<RoleDto> listByUserOrg(@RequestBody Map map);

    /**
     * @Method
     * @Param
     * @Return
     * @Exception
     * @Description [初始化角色显示信息]
     * @Author zhangsong
     * @Version 1.0
     * @Date 2017/11/16 10:26
     */
    List<RoleDto> listAll();

    /**
     * @param roleId 角色ID
     * @Method
     * @Return
     * @Exception
     * @Description [初始化角色显示未删除有效信息]
     * @Author zhangsong
     * @Version 1.0
     * @Date 2017/11/16 10:26
     */
    List<RoleDto> list(@RequestParam(value = "roleId", required = false) String roleId);

    /**
     * @Method
     * @Param
     * @Return
     * @Exception
     * @Description [删除通过角色id]
     * @Author zhangsong
     * @Version 1.0
     * @Date 2017/11/16 10:29
     */

    ReturnData delete(@RequestParam("roleId") String roleId);

    /**
     * @Method
     * @Param
     * @Return
     * @Exception
     * @Description [树形角色显示以及批量显示以及修改]
     * @Author zhangsong
     * @Version 1.0
     * @Date 2017/11/16 10:26
     */
    ReturnData listAddMenu(@RequestBody RoleDto model, @RequestParam("menuCodes") String menuCodes);

    /**
     * 查询
     *
     * @param roleCode
     * @return
     */
    RoleDto getByCode(String roleCode);

    /**
     * 增加 保存信息
     *
     * @param roleDto
     */
    void add(@RequestBody RoleDto roleDto);

    /**
     * 更新修改角色信息
     *
     * @param roleDto
     */
    void updateBySelective(@RequestBody RoleDto roleDto);

    /**
     * 删除数据
     *
     * @param roleId
     */
    void deleteByRoleId(@RequestParam("roleId") String roleId);

    /**
     * 根据角色查询人员信息
     *
     * @param roleId
     * @return
     */
    List<UserOrgRoleDto> listByRoleId(@RequestParam("roleId") String roleId);

    /**
     * @Method
     * @Param
     * @Return
     * @Exception
     * @Description 通过人员角色删除信息]
     * @Author ZHANNSONG
     * @Version 1.0
     * @Date 2017/11/16 10:29
     */

    void deleteUserRole(@RequestParam("userId") String userId, @RequestParam("orgCode") String orgCode);

    /**
     * 增加人员机构角色
     *
     * @param dtos
     */
    void batchAddUserRole(@RequestBody List<Object> dtos);

    /**
     * @param roleName
     * @return
     * @throws
     * @method [queryMutexByList]
     * @description [根据角色名称查询互斥角色]
     * @author 王国庆
     * @version 1.0
     * @date 2018年01月08日 16:50
     */
    List<RoleDto> queryMutexByList(@RequestParam("roleName") String roleName);


    /**
     * @param roleId 角色ID
     * @throws
     * @method [queryMutexNameByList]
     * @description [根据角色ID查询角色信息]
     * @author 王国庆
     * @version 1.0
     * @date 2018年01月08日 16:50
     */
    RoleDto queryMutexNameByList(@RequestParam("roleId") String roleId);

}
